package com.qf.service.impl;

import com.qf.dao.OrderDao;
import com.qf.dao.impl.OrderDaoImpl;
import com.qf.pojo.Order;
import com.qf.pojo.OrderItem;
import com.qf.service.OrderService;
import com.qf.utils.DruidJdbcUtils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * @author 高圆圆
 * @date 2023/1/5 15:57
 * 订单的业务接口实现
 */
public class OrderServiceImpl  implements OrderService {
    /**
     * 添加订单数据
     * @param order 订单实体
     */
    Connection connection = null ;
    @Override
    public void addOrder(Order order) {
        try {
            //生成订单---开启数据的事务
            //获取数据库的连接对象
             connection = DruidJdbcUtils.getConnection();
             connection.setAutoCommit(false) ; //禁用自动提交


            //调用OrderDao插入数据
            //OrderDao---->给Order里面插入数据,同时还需要给OrderItem插入数据
            OrderDao orderDao = new OrderDaoImpl() ;
            //插入订单数据
            orderDao.insertOrder(order) ;

            //int i = 10/0 ;

            //插入订单项数据
            //通过订单实体获取所有订单项
            List<OrderItem> items = order.getItems();
            for(OrderItem orderItem:items){
                orderDao.insertOrderItem(orderItem) ;
            }

            //提交事务
            connection.commit();
        } catch (SQLException throwables) {
            try {
                //事务回滚
                connection.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }

          throwables.printStackTrace();
        }

    }

    /**
     * 通过订单编号获取指定的订单实体
     * @param oid
     * @return 返回订单实体
     */
    @Override
    public Order getOrderByOid(String oid) {
        try {
            //调用OrderDao订单的数据访问接口
            OrderDao orderDao = new OrderDaoImpl() ;
            Order order = orderDao.selectOrderByOid(oid);
            if(order!=null){
                return  order ;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    /**
     * 更新订单的状态
     * @param order 订单实体
     */
    @Override
    public void updateOrderState(Order order) {
        try {
            //调用OrderDao
            OrderDao orderDao = new OrderDaoImpl() ;
            int count = orderDao.updateOrder(order);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }


    }
}
